package com.fucking.great.context.single.resource;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.fucking.great.context.exception.TxnRuntimeException;
import zuo.biao.apijson.parser.ParserDomain;
import zuo.biao.apijson.parser.SQLExplorer;
import zuo.biao.apijson.parser.SQLProviderException;
import zuo.biao.apijson.parser.builder.BuilderType;
import zuo.biao.apijson.parser.provider.APIJSONProvider;

import javax.annotation.Resource;
import java.util.Map;

@Resource
public class APIJSONCompent {

    /**
     * apijson，通过json转化sql语句。
     * json->sql
     * @see <a>https://apijson.org/ </a>
     * @param text jsonStr
     * @param statementType @see zuo.biao.apijson.parser.StatementType
     * @return sql
     */
    public ParserDomain json2sqlByApijson(String text,BuilderType statementType) {
        return  json2sqlByApijson(JSONUtil.parseObj(text),statementType);
    }
    /** apijson，通过json转化sql语句。
     * json->sql
     * @see <a>https://apijson.org/ </a>
     * @param obj fastjson
     * @param statementType
     * @return sql 语句
     */
    private ParserDomain json2sqlByApijson(JSONObject obj, BuilderType statementType) {
        APIJSONProvider apijsonProvider = new APIJSONProvider(obj); //一个APIJSON解析器拿到一个json对象
        apijsonProvider.setStatementType(statementType); //当前为查询模式，还支持新增，修改，删除
        try {
            return SQLExplorer.getSQL(apijsonProvider);
        } catch (SQLProviderException e) {
            throw new TxnRuntimeException( "500",e.getMessage(),e);
        }
    }



}
